home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
351-375
/
368
/
graphicspak
/
graphics_pak.c
next >
Wrap
C/C++ Source or Header
|
1995-03-14
|
5KB
|
185 lines
/***************************************************************************
* graphics_pak.c - general-purpose graphics functions to make programming *
* alot easier! *
* ----------------------------------------------------------------------- *
* Author: Paul T. Miller *
* ----------------------------------------------------------------------- *
* Modification History: *
* --------------------- *
* Date Comment *
* -------- ------- *
* 05-09-90 Bring AllocBitMap into the graphics package
* 05-18-90 DrawLine()
*
***************************************************************************/
#ifndef GRAPHICS_PAK_H
#include "graphics_pak.h"
#endif
#include <proto/graphics.h>
extern struct IntuitionBase *IntuitionBase;
extern struct DiskfontBase *DiskfontBase;
struct Library *LayersBase;
static int openflags;
OpenLibraries(flags)
UWORD flags;
{
openflags = NULL;
if (flags & INTUITIONBASE)
{
IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0);
openflags |= INTUITIONBASE;
}
if (flags & GFXBASE)
{
GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0);
openflags |= GFXBASE;
}
if (flags & LAYERSBASE)
{
LayersBase = (struct LayersBase *)OpenLibrary("layers.library",0);
openflags |= LAYERSBASE;
}
if (flags & DISKFONTBASE)
{
DiskfontBase = (struct DiskfontBase *)OpenLibrary("diskfont.library",0);
if (DiskfontBase)
openflags |= DISKFONTBASE;
}
return(openflags);
}
void CloseLibraries()
{
if (openflags & GFXBASE)
if (GfxBase) CloseLibrary((struct Library *)GfxBase);
if (openflags & INTUITIONBASE)
if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
if (openflags & LAYERSBASE)
if (LayersBase) CloseLibrary(LayersBase);
if (openflags & DISKFONTBASE)
if (DiskfontBase) CloseLibrary((struct Library *)DiskfontBase);
openflags = NULL;
}
void DrawPixel(rp, x, y, c)
register struct RastPort *rp;
register int x, y, c;
{
SetAPen(rp, c);
WritePixel(rp, x, y);
}
void DrawLine(rp, x1, y1, x2, y2, c)
struct RastPort *rp;
int x1, y1, x2, y2, c;
{
SetAPen(rp, c);
Move(rp, x1, y1);
Draw(rp, x2, y2);
}
void DrawBox(rp, x, y, w, h, c)
struct RastPort *rp;
int x, y, w, h, c;
{
SetAPen(rp, c);
Move(rp, x, y);
Draw(rp, x+w, y);
Draw(rp, x+w, y+h);
Draw(rp, x, y+h);
Draw(rp, x, y);
}
void FillBox(rp, x, y, w, h, c)
struct RastPort *rp;
int x, y, w, h, c;
{
SetAPen(rp, c);
RectFill(rp, x, y, x+w, y+h);
}
void WriteText(rport, x, y, text, color)
struct RastPort *rport;
long x, y, color;
char *text;
{
Move(rport, x, y);
SetAPen(rport, color);
SetDrMd(rport, JAM1);
Text(rport, text, strlen(text));
}
struct BitMap *AllocBitMap(width, height, depth, flags)
USHORT width, height;
UBYTE depth, flags;
{
struct BitMap *bm;
register int i;
long memsize = RASSIZE(width, height);
bm = (struct BitMap *)AllocMem(sizeof(struct BitMap), MEMF_CLEAR);
if (bm)
{
InitBitMap(bm, (long)depth, (long)width, (long)height);
for (i = 0; i < depth; i++)
{
if (flags & FASTMEM)
bm->Planes[i] = (PLANEPTR)AllocMem(memsize, MEMF_CLEAR);
else
bm->Planes[i] = (PLANEPTR)AllocMem(memsize, MEMF_CHIP|MEMF_CLEAR);
if (!bm->Planes[i])
{
FreeBitMap(bm);
return(NULL);
}
}
}
return(bm);
}
void FreeBitMap(bm)
struct BitMap *bm;
{
register int i;
if (bm)
{
for (i = 0; i < bm->Depth; i++)
if (bm->Planes[i])
FreeMem(bm->Planes[i], (long)(bm->BytesPerRow * bm->Rows));
FreeMem(bm, sizeof(struct BitMap));
}
}
void MoveBitMap(source, x, y, w, h, dest, dx, dy)
struct BitMap *source, *dest;
int x, y, w, h, dx, dy;
{
if (source && dest)
BltBitMap(source, x, y, dest, dx, dy, w, h, 0xc0, 0xff, NULL);
}
void DrawBitMap(source, x, y, w, h, dest)
struct BitMap *source, *dest;
int x, y, w, h;
{
if (source && dest)
BltBitMap(source, 0, 0, dest, x, y, w, h, 0xc0, 0xff, NULL);
}
void CopyBitMap(source, x, y, w, h, dest)
struct BitMap *source, *dest;
int x, y, w, h;
{
if (source && dest)
BltBitMap(source, x, y, dest, 0, 0, w, h, 0xc0, 0xff, NULL);
}